home *** CD-ROM | disk | FTP | other *** search
/ Basic Instinct 2 Press Kit / Basic Instinct 2 Press Kit.iso / pc / main.dxr / FlashPaper_2_spannotes.swf / scripts / __Packages / FlashPaper / DocumentView.as < prev    next >
Encoding:
Text File  |  2006-03-15  |  40.2 KB  |  1,203 lines

  1. class FlashPaper.DocumentView extends FPUI.Component
  2. {
  3.    var m_documentView;
  4.    var pages_mc;
  5.    var y_sb;
  6.    static var MAX_CHARS_PER_PAGE = 2147483646;
  7.    static var HUGE_HIT_TEST_DIST = 100000;
  8.    static var PAGE_MARGIN = 8;
  9.    static var MIN_WIDTH = 64;
  10.    static var PAGE_SPACING = 24;
  11.    static var LOADING_OFFSET = 16;
  12.    static var VISIBILITY_MARGIN = 32;
  13.    static var KEY_SCROLL_DISTANCE = 50;
  14.    static var WHEEL_SCROLL_DISTANCE = 50;
  15.    static var DROPSHADOW_HEIGHT = 2;
  16.    static var TOOL_HYSTERESIS = 4;
  17.    static var DBLCLICK_DIST = 2;
  18.    static var DBLCLICK_TIME = 500;
  19.    static var PAGE_TAB_INDEX_BASE = 400;
  20.    static var SMART_FIND = ["\'‚Äò‚Äô","\"‚Äú‚Äù"];
  21.    static var WORD_BREAK = "\t\n\x0b\f\r ¬Ö¬†·öÄ·†é‚ÄÄ‚ÄÅ‚ÄÇ‚ÄÉ‚ÄÑ‚ÄÖ‚ÄÜ‚Äá‚Äà‚Äâ‚Ää‚Ä®‚Ä©‚ÄØ‚Åü„ÄÄÔªø-¬≠÷䷆܂Äê‚Äë„ɪÔπ£ÔºçÔΩ•\"\'¬´¬ª‚Äò‚Äô‚Äö‚Äõ‚Äú‚Äù‚Äû‚Äü‚Äπ‚Ä∫„Äå„Äç„Äé„Äè„Äù„Äû„ÄüÔπÅÔπÇÔπÉÔπÑÔºÇÔºáÔΩ¢ÔΩ£!,.:;?ÕæŒá÷âÿåÿõÿü€î‹Ä‹Å‹Ç‹É‹Ñ‹Ö‹Ü‹á‹à‹â‹ä‹å‡•§‡••‡πö‡πõ·Åä·Åã·ç°·ç¢·ç£·ç§·ç•·ç¶·çß·ç®·ô≠·ôÆ·õ´·õ≠·üî·üï·üñ·üö·†Ç·†É·†Ñ·†Ö·†à·†â·•Ñ·•ւĺ‚ÄΩ‚Åá‚Åà‚Åâ„ÄÅ„ÄÇÔπêÔπëÔπíÔπîÔπïÔπñÔπóÔºÅÔºåÔºéÔºöÔºõÔºüÔΩ°ÔΩ§#$%&()*+/<=>@[\\]^`{|}" + "~";
  22.    static var MAX_WORD_FIND_RADIUS = 100;
  23.    var m_mainView = null;
  24.    var m_usingTool = false;
  25.    var m_lastClickHeadPageIdx = 0;
  26.    var m_lastClickHeadCharIdx = -1;
  27.    var m_useLastClickForHead = false;
  28.    var m_headPageIdx = 0;
  29.    var m_headCharIdx = -1;
  30.    var m_tailPageIdx = 0;
  31.    var m_tailCharIdx = -1;
  32.    var m_scaledDocWidthInScreenDpi = 0;
  33.    var m_docWidthInScreenDpi = 0;
  34.    var m_startScrollX = 0;
  35.    var m_startScrollY = 0;
  36.    var m_initialMouseTime = 0;
  37.    var m_initialMouseX = 0;
  38.    var m_initialMouseY = 0;
  39.    var m_mouseMovedEnough = false;
  40.    var m_doubleClicked = false;
  41.    var m_wordSelect = false;
  42.    var m_curTool = "";
  43.    var m_fpMask = null;
  44.    var m_searchToTop = false;
  45.    var m_smartFindChars = null;
  46.    var m_scrollingEnabled = true;
  47.    var m_maxPageWidth = 0;
  48.    var m_maxPageHeight = 0;
  49.    function DocumentView()
  50.    {
  51.       var _loc2_ = this;
  52.       super();
  53.       _loc2_.m_delayedBroadcasts = new Object();
  54.       _loc2_.emptySelection();
  55.       _loc2_.m_smartFindChars = new Object();
  56.       for(var _loc3_ in FlashPaper.DocumentView.SMART_FIND)
  57.       {
  58.          var _loc1_ = FlashPaper.DocumentView.SMART_FIND[_loc3_];
  59.          var _loc3_ = 0;
  60.          while(_loc3_ < _loc1_.length)
  61.          {
  62.             _loc2_.m_smartFindChars[_loc1_.substr(_loc3_,1)] = _loc1_;
  63.             _loc3_ = _loc3_ + 1;
  64.          }
  65.       }
  66.    }
  67.    function handleDelayedBroadcast()
  68.    {
  69.       var _loc2_ = this;
  70.       var _loc1_ = _loc2_.m_delayedBroadcasts;
  71.       _loc2_.m_delayedBroadcasts = new Object();
  72.       delete _loc2_.onEnterFrame;
  73.       for(var _loc3_ in _loc1_)
  74.       {
  75.          if(_loc1_[_loc3_])
  76.          {
  77.             _loc2_.m_mainView.broadcastMessage(_loc3_);
  78.          }
  79.       }
  80.    }
  81.    function delayedBroadcast(s, b)
  82.    {
  83.       var _loc1_ = this;
  84.       _loc1_.m_delayedBroadcasts[s] = b;
  85.       _loc1_.onEnterFrame = _loc1_.handleDelayedBroadcast;
  86.    }
  87.    function setMainView(p_mainView, p_searchToTop)
  88.    {
  89.       var _loc1_ = this;
  90.       _loc1_.m_mainView = p_mainView;
  91.       _loc1_.m_searchToTop = p_searchToTop;
  92.       if(_loc1_.m_mainView)
  93.       {
  94.          _loc1_.m_mainView.addListener(_loc1_);
  95.          _loc1_.m_docWidthInScreenDpi = _loc1_.m_mainView.getDocumentWidth() * _loc1_.m_mainView.getDocDpiToScreenDpiFactor();
  96.          _loc1_.m_scaledDocWidthInScreenDpi = _loc1_.m_docWidthInScreenDpi;
  97.          _loc1_.y_sb.setSmallScroll(FlashPaper.DocumentView.KEY_SCROLL_DISTANCE);
  98.          _loc1_.y_sb.setChangeHandler("sendOnScroll",_loc1_);
  99.          _loc1_.x_sb.setSmallScroll(FlashPaper.DocumentView.KEY_SCROLL_DISTANCE);
  100.          _loc1_.x_sb.setChangeHandler("sendOnScroll",_loc1_);
  101.          _loc1_.bg_mc.useHandCursor = false;
  102.          _loc1_.bg_mc.m_documentView = _loc1_;
  103.          _loc1_.bg_mc.onRollOver = function()
  104.          {
  105.             this.m_documentView.onToolOver();
  106.          };
  107.          _loc1_.bg_mc.onMouseDown = function()
  108.          {
  109.             this.m_documentView.onToolDown();
  110.          };
  111.          _loc1_.bg_mc.onMouseMove = _loc1_.bg_mc.onEnterFrame = function()
  112.          {
  113.             this.m_documentView.onToolMove();
  114.          };
  115.          _loc1_.bg_mc.onMouseUp = function()
  116.          {
  117.             this.m_documentView.onToolUp();
  118.          };
  119.          _loc1_.bg_mc.onRollOut = _loc1_.bg_mc.onReleaseOutside = function()
  120.          {
  121.             this.m_documentView.onToolOut();
  122.          };
  123.          Mouse.addListener(_loc1_);
  124.          _loc1_.setToolMode("pan");
  125.       }
  126.       _loc1_.tabChildren = true;
  127.       if(_loc1_._accImpl != null)
  128.       {
  129.          delete _loc1_._accImpl;
  130.          _loc1_._accImpl = null;
  131.       }
  132.    }
  133.    function sendOnScroll()
  134.    {
  135.       var _loc1_ = this;
  136.       _loc1_.m_mainView.activateHyperlinks(_loc1_.getScrolledPage(true));
  137.       _loc1_.m_mainView.broadcastMessage("internal_onScroll");
  138.       _loc1_.delayedBroadcast("onVisibleAreaChanged",true);
  139.    }
  140.    function getNthPage(i)
  141.    {
  142.       return this.pages_mc["page" + i + "_mc"];
  143.    }
  144.    function getNthTextMC(i)
  145.    {
  146.       var _loc1_ = this.getNthPage(i);
  147.       if(_loc1_ != null)
  148.       {
  149.          return _loc1_.fpcontent_mc;
  150.       }
  151.       return null;
  152.    }
  153.    function positionMsg(pagemc)
  154.    {
  155.       var _loc1_ = pagemc.msg_mc;
  156.       if(_loc1_ != undefined)
  157.       {
  158.          var _loc3_ = pagemc.pageBorder_mc;
  159.          var _loc2_ = 1 / this.m_mainView.getCurrentScaleFraction();
  160.          _loc1_._xscale = _loc1_._yscale = _loc2_ * 100;
  161.          _loc1_._y = _loc2_ * FlashPaper.DocumentView.LOADING_OFFSET;
  162.          _loc1_._x = pagemc._x + _loc2_ * FlashPaper.DocumentView.LOADING_OFFSET;
  163.          _loc1_._visible = !(_loc1_._x + _loc1_._width > _loc3_._width || _loc1_._y - pagemc._y + _loc1_._height > _loc3_._height) ? true : false;
  164.       }
  165.    }
  166.    function internal_onAddPage(width_i, height_i)
  167.    {
  168.       var _loc1_ = this;
  169.       var _loc3_ = _loc1_.m_mainView.getNumPages();
  170.       var _loc2_ = _loc1_.pages_mc.attachMovie("blank","page" + _loc3_ + "_mc",_loc3_);
  171.       _loc1_.m_maxPageWidth = Math.max(_loc1_.m_maxPageWidth,width_i);
  172.       _loc1_.m_maxPageHeight = Math.max(_loc1_.m_maxPageHeight,height_i);
  173.       var pbmc = _loc2_.attachMovie("pageBorder","pageBorder_mc",10);
  174.       var factor = _loc1_.m_mainView.getDocDpiToScreenDpiFactor();
  175.       pbmc._width = width_i * factor;
  176.       pbmc._height = height_i * factor;
  177.       _loc2_.attachMovie("pageLoadingMsg","msg_mc",11);
  178.       _loc1_.positionMsg(_loc2_);
  179.       FlashPaper.Utils.addShadow(_loc2_,3,pbmc._width,pbmc._height,false);
  180.       if(_loc3_ > 1)
  181.       {
  182.          var mc = _loc1_.getNthPage(_loc3_ - 1);
  183.          _loc2_._y = mc._y + mc._height + FlashPaper.DocumentView.PAGE_SPACING;
  184.       }
  185.       else
  186.       {
  187.          _loc2_._y = 0;
  188.       }
  189.    }
  190.    function calcPageWidthScale()
  191.    {
  192.       return (this.y_sb._x - FlashPaper.DocumentView.PAGE_MARGIN * 2) / this.m_docWidthInScreenDpi * 100;
  193.    }
  194.    function calcPageFitScale()
  195.    {
  196.       var _loc1_ = this;
  197.       var _loc3_ = _loc1_.calcPageWidthScale();
  198.       var _loc2_ = (_loc1_.y_sb.getSize() - FlashPaper.DocumentView.PAGE_MARGIN * 2) / (_loc1_.m_maxPageHeight * _loc1_.m_mainView.getDocDpiToScreenDpiFactor()) * 100;
  199.       var pageFitScale = Math.min(_loc2_,_loc3_);
  200.       return pageFitScale;
  201.    }
  202.    function getMinWidth()
  203.    {
  204.       return FlashPaper.DocumentView.MIN_WIDTH;
  205.    }
  206.    function onResize()
  207.    {
  208.       var _loc1_ = this;
  209.       var _loc3_ = _loc1_.m_mainView.getDocViewWidth();
  210.       var _loc2_ = _loc1_.m_mainView.getDocViewHeight();
  211.       _loc3_ -= !_loc1_.y_sb._visible ? 0 : _loc1_.y_sb._width;
  212.       _loc2_ -= !_loc1_.x_sb._visible ? 0 : _loc1_.x_sb._height;
  213.       _loc1_.y_sb._x = _loc3_;
  214.       _loc1_.y_sb.setSize(_loc2_);
  215.       _loc1_.y_sb.setEnabled(_loc1_.m_scrollingEnabled);
  216.       _loc1_.x_sb._y = _loc2_;
  217.       _loc1_.x_sb.setSize(_loc3_);
  218.       _loc1_.x_sb.setEnabled(_loc1_.m_scrollingEnabled);
  219.       _loc1_.bg_mc._y = - FlashPaper.DocumentView.DROPSHADOW_HEIGHT;
  220.       _loc1_.bg_mc._x = 0;
  221.       _loc1_.bg_mc._width = _loc3_;
  222.       _loc1_.bg_mc._height = FlashPaper.DocumentView.DROPSHADOW_HEIGHT + _loc2_;
  223.       _loc1_.corner_mc._visible = _loc1_.x_sb._visible && _loc1_.y_sb._visible;
  224.       _loc1_.corner_mc._x = _loc1_.x_sb._x + _loc1_.x_sb.getSize();
  225.       _loc1_.corner_mc._y = _loc1_.y_sb._y + _loc1_.y_sb.getSize();
  226.    }
  227.    function adjustBar(sb, maxScroll)
  228.    {
  229.       var _loc2_ = maxScroll;
  230.       var _loc3_ = sb;
  231.       var _loc1_ = _loc3_.getSize();
  232.       _loc2_ -= _loc1_;
  233.       _loc3_.setScrollProperties(_loc1_,_loc2_);
  234.       _loc3_._visible = _loc2_ > 0;
  235.    }
  236.    function internal_onZoom(percent)
  237.    {
  238.       var _loc1_ = this;
  239.       _loc1_.pages_mc._xscale = _loc1_.pages_mc._yscale = percent;
  240.       _loc1_.m_scaledDocWidthInScreenDpi = _loc1_.m_docWidthInScreenDpi * (percent / 100);
  241.       var y = _loc1_.y_sb.getScrollPosition() / _loc1_.y_sb.getMaxPos();
  242.       if(isNaN(y) || y == Infinity)
  243.       {
  244.          y = 0;
  245.       }
  246.       var x = _loc1_.x_sb.getScrollPosition() / _loc1_.x_sb.getMaxPos();
  247.       if(isNaN(x) || x == Infinity)
  248.       {
  249.          x = 0.5;
  250.       }
  251.       _loc1_.adjustBar(_loc1_.x_sb,_loc1_.m_scaledDocWidthInScreenDpi + FlashPaper.DocumentView.PAGE_MARGIN * 2);
  252.       _loc1_.adjustBar(_loc1_.y_sb,_loc1_.pages_mc._height + FlashPaper.DocumentView.PAGE_MARGIN * 2 + (!_loc1_.x_sb._visible ? 0 : _loc1_.x_sb._height));
  253.       _loc1_.onResize();
  254.       _loc1_.y_sb.setScrollPosition(y * _loc1_.y_sb.getMaxPos());
  255.       _loc1_.x_sb.setScrollPosition(x * _loc1_.x_sb.getMaxPos());
  256.       _loc1_.sendOnScroll();
  257.       var _loc3_ = _loc1_.m_mainView.getNumPages();
  258.       var _loc2_ = 1;
  259.       while(_loc2_ <= _loc3_)
  260.       {
  261.          _loc1_.positionMsg(_loc1_.getNthPage(_loc2_));
  262.          _loc2_ = _loc2_ + 1;
  263.       }
  264.       _loc1_.m_mainView.onPageMayHaveChanged();
  265.    }
  266.    function onScrollSB(sb, s, i)
  267.    {
  268.       var _loc1_ = undefined;
  269.       if(sb._visible)
  270.       {
  271.          _loc1_ = sb.getScrollPosition();
  272.          if(isNaN(_loc1_) || _loc1_ < 0)
  273.          {
  274.             _loc1_ = 0;
  275.          }
  276.       }
  277.       else
  278.       {
  279.          _loc1_ = i;
  280.       }
  281.       this.pages_mc[s] = - _loc1_ + FlashPaper.DocumentView.PAGE_MARGIN;
  282.       this.m_mainView.onPageMayHaveChanged();
  283.    }
  284.    function internal_onScroll()
  285.    {
  286.       var _loc1_ = this;
  287.       _loc1_.onScrollSB(_loc1_.x_sb,"_x",(- (_loc1_.y_sb._x - _loc1_.m_scaledDocWidthInScreenDpi)) / 2 + FlashPaper.DocumentView.PAGE_MARGIN);
  288.       _loc1_.onScrollSB(_loc1_.y_sb,"_y",0);
  289.    }
  290.    function getVisibleArea()
  291.    {
  292.       var _loc1_ = this;
  293.       var _loc2_ = new Object();
  294.       var _loc3_ = _loc1_.m_mainView.getCurrentScaleFraction();
  295.       _loc2_.x = _loc1_.x_sb.getScrollPosition() / _loc3_;
  296.       _loc2_.y = _loc1_.y_sb.getScrollPosition() / _loc3_;
  297.       _loc2_.w = (_loc1_.bg_mc._width - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc3_;
  298.       _loc2_.h = (_loc1_.bg_mc._height - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc3_;
  299.       _loc2_.s = _loc1_.m_mainView.getSidebarWidth() / _loc1_.m_mainView.getWidth();
  300.       _loc2_.equals = function(that)
  301.       {
  302.          var _loc1_ = this;
  303.          var _loc2_ = that;
  304.          var _loc0_ = _loc1_.x == _loc2_.x && _loc1_.y == _loc2_.y && _loc1_.w == _loc2_.w && _loc1_.h == _loc2_.h && _loc1_.s == _loc2_.s;
  305.          _loc2_;
  306.          _loc1_;
  307.          return _loc0_;
  308.       };
  309.       return _loc2_;
  310.    }
  311.    function setVisibleArea(area, skipBroadcast)
  312.    {
  313.       var _loc1_ = this;
  314.       var _loc2_ = area;
  315.       var w = (_loc1_.bg_mc._width - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc2_.w;
  316.       var h = (_loc1_.bg_mc._height - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc2_.h;
  317.       _loc1_.m_mainView.setCurrentZoom(Math.min(w,h) * 100);
  318.       var _loc3_ = _loc1_.m_mainView.getCurrentScaleFraction();
  319.       _loc1_.x_sb.setScrollPosition(_loc2_.x * _loc3_);
  320.       _loc1_.y_sb.setScrollPosition(_loc2_.y * _loc3_);
  321.       _loc1_.m_mainView.setSidebarWidth(_loc2_.s * _loc1_.m_mainView.getWidth());
  322.       if(skipBroadcast)
  323.       {
  324.          _loc1_.delayedBroadcast("onVisibleAreaChanged",false);
  325.       }
  326.    }
  327.    function onEnableScrolling(flag)
  328.    {
  329.       var _loc1_ = this;
  330.       _loc1_.m_scrollingEnabled = flag;
  331.       if(!_loc1_.m_scrollingEnabled && _loc1_.m_curTool == "pan")
  332.       {
  333.          _loc1_.setToolMode("");
  334.       }
  335.       else if(_loc1_.m_scrollingEnabled && _loc1_.m_curTool == "")
  336.       {
  337.          _loc1_.setToolMode("pan");
  338.       }
  339.       _loc1_.onResize();
  340.    }
  341.    function setPage(pageNum_i)
  342.    {
  343.       var _loc1_ = this;
  344.       _loc1_.y_sb.setScrollPosition(_loc1_.getNthPage(pageNum_i)._y * _loc1_.m_mainView.getCurrentScaleFraction());
  345.       _loc1_.m_mainView.onPageMayHaveChanged();
  346.    }
  347.    function goToAnchor(anchor_o)
  348.    {
  349.       var _loc1_ = this;
  350.       var _loc3_ = _loc1_.getNthPage(anchor_o.pageNum_i);
  351.       var _loc2_ = _loc1_.m_mainView.getDocDpiToScreenDpiFactor();
  352.       _loc1_.ensureVisibleSB(_loc1_.y_sb,_loc3_._y + anchor_o.top_i * _loc2_,_loc3_._y + anchor_o.bottom_i * _loc2_,_loc1_.m_searchToTop,false);
  353.       _loc1_.ensureVisibleSB(_loc1_.x_sb,_loc3_._x + anchor_o.left_i * _loc2_,_loc3_._x + anchor_o.right_i * _loc2_,false,false);
  354.       _loc1_.m_mainView.onPageMayHaveChanged();
  355.    }
  356.    function hitTestTextMC()
  357.    {
  358.       var _loc3_ = this.m_mainView.getNumPages();
  359.       var _loc1_ = 1;
  360.       while(_loc1_ <= _loc3_)
  361.       {
  362.          var _loc2_ = this.getNthTextMC(_loc1_);
  363.          if(_loc2_ != null && FlashPaper.Utils.doMouseHitTest(_loc2_))
  364.          {
  365.             return _loc1_;
  366.          }
  367.          _loc1_ = _loc1_ + 1;
  368.       }
  369.       return 0;
  370.    }
  371.    function selectRange(startmc_i, startIdx_i, endmc_i, endIdx_i, select_b)
  372.    {
  373.       if(endmc_i < startmc_i)
  374.       {
  375.          this.selectRange(endmc_i,endIdx_i,startmc_i,startIdx_i,select_b);
  376.       }
  377.       else
  378.       {
  379.          var _loc3_ = startIdx_i;
  380.          var end_i = FlashPaper.DocumentView.MAX_CHARS_PER_PAGE;
  381.          var _loc2_ = startmc_i;
  382.          while(_loc2_ <= endmc_i)
  383.          {
  384.             if(_loc2_ == endmc_i)
  385.             {
  386.                end_i = endIdx_i;
  387.             }
  388.             var text_mc = this.getNthTextMC(_loc2_);
  389.             if(text_mc != null)
  390.             {
  391.                var _loc1_ = text_mc.getTS(select_b);
  392.                if(_loc1_ != null)
  393.                {
  394.                   _loc1_.setSelectColor(FPUI.Component.kHiliteColor);
  395.                   if(_loc3_ <= end_i)
  396.                   {
  397.                      _loc1_.setSelected(_loc3_,end_i + 1,select_b);
  398.                   }
  399.                   else
  400.                   {
  401.                      _loc1_.setSelected(end_i,_loc3_ + 1,select_b);
  402.                   }
  403.                }
  404.             }
  405.             _loc3_ = 0;
  406.             _loc3_ = 0;
  407.             _loc2_ = _loc2_ + 1;
  408.          }
  409.       }
  410.    }
  411.    function findPageWordBoundary(page_i, char_i, dir_i, select_b)
  412.    {
  413.       var _loc3_ = char_i;
  414.       var _loc2_ = this.getNthTextMC(page_i);
  415.       if(_loc2_ != null)
  416.       {
  417.          var _loc1_ = _loc2_.getTS(select_b);
  418.          if(_loc1_ != null)
  419.          {
  420.             _loc3_ = FlashPaper.DocumentView.findWordBoundary(_loc1_,_loc3_,dir_i);
  421.          }
  422.       }
  423.       return _loc3_;
  424.    }
  425.    static function findWordBoundary(textSnapshot_ts, start_i, dir_i)
  426.    {
  427.       var _loc1_ = start_i;
  428.       var _loc3_ = Math.max(_loc1_ - FlashPaper.DocumentView.MAX_WORD_FIND_RADIUS,0);
  429.       var end_i = Math.min(_loc1_ + FlashPaper.DocumentView.MAX_WORD_FIND_RADIUS,textSnapshot_ts.getCount() - 1);
  430.       while(true)
  431.       {
  432.          var _loc2_ = textSnapshot_ts.getText(_loc1_,_loc1_ + 1);
  433.          if(FlashPaper.DocumentView.WORD_BREAK.indexOf(_loc2_) != -1)
  434.          {
  435.             break;
  436.          }
  437.          _loc1_ += dir_i;
  438.          if(_loc1_ < _loc3_)
  439.          {
  440.             return _loc3_;
  441.          }
  442.          if(_loc1_ > end_i)
  443.          {
  444.             return end_i;
  445.          }
  446.       }
  447.       if(_loc1_ != start_i)
  448.       {
  449.          _loc1_ -= dir_i;
  450.       }
  451.       return _loc1_;
  452.    }
  453.    function emptySelection()
  454.    {
  455.       var _loc1_ = this;
  456.       _loc1_.selectRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,false);
  457.       _loc1_.m_headPageIdx = 0;
  458.       _loc1_.m_headCharIdx = -1;
  459.       _loc1_.m_tailPageIdx = 0;
  460.       _loc1_.m_tailCharIdx = -1;
  461.       _loc1_.delayedBroadcast("onSelection",true);
  462.    }
  463.    function tossAllTS()
  464.    {
  465.       this.emptySelection();
  466.       var _loc3_ = this.m_mainView.getNumPages();
  467.       var _loc1_ = 1;
  468.       while(_loc1_ <= _loc3_)
  469.       {
  470.          var _loc2_ = this.getNthTextMC(_loc1_);
  471.          if(_loc2_ != null)
  472.          {
  473.             _loc2_.freeTS();
  474.          }
  475.          _loc1_ = _loc1_ + 1;
  476.       }
  477.       updateAfterEvent();
  478.    }
  479.    function getSelectionOrder()
  480.    {
  481.       var _loc1_ = this;
  482.       if(_loc1_.m_headPageIdx < _loc1_.m_tailPageIdx)
  483.       {
  484.          return -1;
  485.       }
  486.       if(_loc1_.m_headPageIdx > _loc1_.m_tailPageIdx)
  487.       {
  488.          return 1;
  489.       }
  490.       if(_loc1_.m_headCharIdx < _loc1_.m_tailCharIdx)
  491.       {
  492.          return -1;
  493.       }
  494.       if(_loc1_.m_headCharIdx > _loc1_.m_tailCharIdx)
  495.       {
  496.          return 1;
  497.       }
  498.       return 0;
  499.    }
  500.    function updateSelectionRange(startmc_i, startIdx_i, endmc_i, endIdx_i)
  501.    {
  502.       var _loc1_ = this;
  503.       _loc1_.selectRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,false);
  504.       _loc1_.m_headPageIdx = startmc_i;
  505.       _loc1_.m_headCharIdx = startIdx_i;
  506.       _loc1_.m_tailPageIdx = endmc_i;
  507.       _loc1_.m_tailCharIdx = endIdx_i;
  508.       if(_loc1_.m_wordSelect)
  509.       {
  510.          var _loc2_ = _loc1_.getSelectionOrder() > 0 ? 1 : -1;
  511.          _loc1_.m_headCharIdx = _loc1_.findPageWordBoundary(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc2_,true);
  512.          _loc1_.m_tailCharIdx = _loc1_.findPageWordBoundary(_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,- _loc2_,true);
  513.       }
  514.       _loc1_.selectRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,true);
  515.       _loc1_.m_lastClickHeadPageIdx = startmc_i;
  516.       _loc1_.m_lastClickHeadCharIdx = startIdx_i;
  517.       _loc1_.delayedBroadcast("onSelection",true);
  518.    }
  519.    function updateSelectionTail(newTailMC_i, newTailIdx_i)
  520.    {
  521.       var _loc1_ = this;
  522.       var _loc2_ = newTailMC_i;
  523.       var _loc3_ = newTailIdx_i;
  524.       if(_loc3_ >= 0)
  525.       {
  526.          var order = _loc1_.getSelectionOrder();
  527.          var dir_i = 0;
  528.          if(order <= 0 && (_loc2_ == _loc1_.m_tailPageIdx && _loc3_ > _loc1_.m_tailCharIdx || _loc2_ > _loc1_.m_tailPageIdx))
  529.          {
  530.             dir_i = 1;
  531.          }
  532.          else if(order >= 0 && (_loc2_ == _loc1_.m_tailPageIdx && _loc3_ < _loc1_.m_tailCharIdx || _loc2_ < _loc1_.m_tailPageIdx))
  533.          {
  534.             dir_i = -1;
  535.          }
  536.          if(dir_i != 0)
  537.          {
  538.             if(_loc1_.m_wordSelect)
  539.             {
  540.                _loc3_ = _loc1_.findPageWordBoundary(_loc2_,_loc3_,dir_i,true);
  541.             }
  542.             _loc1_.selectRange(_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,_loc2_,_loc3_,true);
  543.             _loc1_.m_tailPageIdx = _loc2_;
  544.             _loc1_.m_tailCharIdx = _loc3_;
  545.             _loc1_.delayedBroadcast("onSelection",true);
  546.          }
  547.          else if(_loc2_ != _loc1_.m_tailPageIdx || _loc3_ != _loc1_.m_tailCharIdx)
  548.          {
  549.             _loc1_.updateSelectionRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc2_,_loc3_);
  550.          }
  551.       }
  552.    }
  553.    function keyDown(key_i)
  554.    {
  555.       var _loc1_ = this;
  556.       if(_loc1_.m_scrollingEnabled)
  557.       {
  558.          if(!FPUI.Component.focusedComponent.m_eatsNavKeysWhenFocused)
  559.          {
  560.             var _loc3_ = Selection.getFocus() == null;
  561.             var scrollX_i = _loc1_.x_sb.getScrollPosition();
  562.             var _loc2_ = _loc1_.y_sb.getScrollPosition();
  563.             switch(key_i)
  564.             {
  565.                case 34:
  566.                   _loc2_ += _loc1_.y_sb.getSize();
  567.                   break;
  568.                case 33:
  569.                   _loc2_ -= _loc1_.y_sb.getSize();
  570.                   break;
  571.                case 35:
  572.                   if(_loc3_)
  573.                   {
  574.                      _loc2_ = _loc1_.y_sb.getMaxPos();
  575.                   }
  576.                   break;
  577.                case 36:
  578.                   if(_loc3_)
  579.                   {
  580.                      _loc2_ = 0;
  581.                   }
  582.                   break;
  583.                case 40:
  584.                   _loc2_ += FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
  585.                   break;
  586.                case 38:
  587.                   _loc2_ -= FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
  588.                   break;
  589.                case 37:
  590.                   if(_loc3_)
  591.                   {
  592.                      scrollX_i -= FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
  593.                   }
  594.                   break;
  595.                case 39:
  596.                   if(_loc3_)
  597.                   {
  598.                      scrollX_i += FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
  599.                   }
  600.             }
  601.             _loc1_.y_sb.setScrollPosition(_loc2_);
  602.             _loc1_.x_sb.setScrollPosition(scrollX_i);
  603.             _loc1_.m_mainView.onPageMayHaveChanged();
  604.          }
  605.       }
  606.    }
  607.    static function unionPoint(x, y, rect)
  608.    {
  609.       var _loc1_ = rect;
  610.       _loc1_.left = Math.min(_loc1_.left,x);
  611.       _loc1_.right = Math.max(_loc1_.right,x);
  612.       _loc1_.top = Math.min(_loc1_.top,y);
  613.       _loc1_.bottom = Math.max(_loc1_.bottom,y);
  614.    }
  615.    function getSelectionRect(onlyFirstPage)
  616.    {
  617.       var sel = null;
  618.       var start_i = this.m_headCharIdx;
  619.       var end_i = FlashPaper.DocumentView.MAX_CHARS_PER_PAGE;
  620.       var i = this.m_headPageIdx;
  621.       while(i <= this.m_tailPageIdx)
  622.       {
  623.          var text_mc = this.getNthTextMC(i);
  624.          if(text_mc != null)
  625.          {
  626.             var textSnapshot_ts = text_mc.getTS(true);
  627.             if(textSnapshot_ts != null)
  628.             {
  629.                if(i == this.m_tailPageIdx)
  630.                {
  631.                   end_i = this.m_tailCharIdx;
  632.                }
  633.                if(sel == null)
  634.                {
  635.                   sel = new Object();
  636.                   sel.left = 1000000000;
  637.                   sel.top = 1000000000;
  638.                   sel.right = -1000000000;
  639.                   sel.bottom = -1000000000;
  640.                }
  641.                if(textSnapshot_ts.getTextRunInfo === undefined)
  642.                {
  643.                   var pagemc = this.getNthPage(i);
  644.                   FlashPaper.DocumentView.unionPoint(pagemc._x,pagemc._y,sel);
  645.                   FlashPaper.DocumentView.unionPoint(pagemc._x + pagemc._width,pagemc._y + pagemc._height,sel);
  646.                }
  647.                else
  648.                {
  649.                   var _loc1_ = new Object();
  650.                   var info = textSnapshot_ts.getTextRunInfo(start_i,end_i);
  651.                   var _loc3_ = 0;
  652.                   while(_loc3_ < info.length)
  653.                   {
  654.                      var _loc2_ = 0;
  655.                      while(_loc2_ < 4)
  656.                      {
  657.                         _loc1_.x = info[_loc3_]["corner" + _loc2_ + "x"];
  658.                         _loc1_.y = info[_loc3_]["corner" + _loc2_ + "y"];
  659.                         text_mc.localToGlobal(_loc1_);
  660.                         this.pages_mc.globalToLocal(_loc1_);
  661.                         FlashPaper.DocumentView.unionPoint(_loc1_.x,_loc1_.y,sel);
  662.                         _loc2_ = _loc2_ + 1;
  663.                      }
  664.                      _loc3_ = _loc3_ + 1;
  665.                   }
  666.                }
  667.                if(onlyFirstPage)
  668.                {
  669.                   break;
  670.                }
  671.             }
  672.          }
  673.          start_i = 0;
  674.          ++i;
  675.       }
  676.       return sel;
  677.    }
  678.    function ensureVisibleSB(sb, min, max, toTop, includeSlop)
  679.    {
  680.       if(sb._visible)
  681.       {
  682.          var _loc2_ = this.m_mainView.getCurrentScaleFraction();
  683.          var curScrollPos = sb.getScrollPosition();
  684.          var _loc1_ = Math.round(curScrollPos / _loc2_);
  685.          var curVisMax = Math.round((curScrollPos + (!toTop ? sb.getSize() : FlashPaper.DocumentView.VISIBILITY_MARGIN)) / _loc2_);
  686.          var _loc3_ = !includeSlop ? 0 : FlashPaper.DocumentView.VISIBILITY_MARGIN / _loc2_;
  687.          min -= _loc3_;
  688.          max += _loc3_;
  689.          if(max > curVisMax)
  690.          {
  691.             _loc1_ = Math.round(max - (curVisMax - _loc1_));
  692.          }
  693.          if(min < _loc1_)
  694.          {
  695.             _loc1_ = min;
  696.          }
  697.          return sb.setScrollPosition(_loc1_ * _loc2_);
  698.       }
  699.       return false;
  700.    }
  701.    function ensureSelectionIsVisible()
  702.    {
  703.       var _loc1_ = this;
  704.       var _loc2_ = _loc1_.getSelectionRect(true);
  705.       if(_loc2_ != null)
  706.       {
  707.          _loc1_.ensureVisibleSB(_loc1_.x_sb,_loc2_.left,_loc2_.right,false,true);
  708.          var _loc3_ = _loc1_.ensureVisibleSB(_loc1_.y_sb,_loc2_.top,_loc2_.bottom,_loc1_.m_searchToTop,true);
  709.          if(_loc3_)
  710.          {
  711.             _loc1_.m_mainView.onPageMayHaveChanged();
  712.          }
  713.       }
  714.    }
  715.    static function charsMatch(src, pattern, matcher)
  716.    {
  717.       var _loc2_ = src;
  718.       var _loc3_ = pattern;
  719.       if(_loc2_.length == _loc3_.length)
  720.       {
  721.          if(_loc2_ == _loc3_)
  722.          {
  723.             return true;
  724.          }
  725.          var _loc1_ = matcher[_loc3_];
  726.          if(_loc1_ != undefined)
  727.          {
  728.             if(_loc1_.indexOf(_loc2_) != -1)
  729.             {
  730.                return true;
  731.             }
  732.          }
  733.       }
  734.       return false;
  735.    }
  736.    static function findSpecial(textSnapshot_ts, startIdx_i, pattern, caseSens_b, matcher)
  737.    {
  738.       if(!caseSens_b)
  739.       {
  740.          pattern = pattern.toLowerCase();
  741.       }
  742.       var count = textSnapshot_ts.getCount();
  743.       var _loc3_ = startIdx_i;
  744.       while(true)
  745.       {
  746.          if(_loc3_ < count)
  747.          {
  748.             var _loc2_ = textSnapshot_ts.getText(_loc3_,_loc3_ + pattern.length);
  749.             if(!caseSens_b)
  750.             {
  751.                _loc2_ = _loc2_.toLowerCase();
  752.             }
  753.             if(FlashPaper.DocumentView.charsMatch(_loc2_.charAt(0),pattern.charAt(0),matcher))
  754.             {
  755.                var found = true;
  756.                var _loc1_ = 1;
  757.                while(_loc1_ < pattern.length)
  758.                {
  759.                   if(!FlashPaper.DocumentView.charsMatch(_loc2_.charAt(_loc1_),pattern.charAt(_loc1_),matcher))
  760.                   {
  761.                      found = false;
  762.                      break;
  763.                   }
  764.                   _loc1_ = _loc1_ + 1;
  765.                }
  766.                if(found)
  767.                {
  768.                   break;
  769.                }
  770.             }
  771.          }
  772.          else
  773.          {
  774.             return -1;
  775.          }
  776.          _loc3_ = _loc3_ + 1;
  777.       }
  778.       return _loc3_;
  779.    }
  780.    function findText(textToFind_str, caseSens_b)
  781.    {
  782.       var _loc2_ = this;
  783.       var anySpecial = false;
  784.       var j = 0;
  785.       while(j < textToFind_str.length)
  786.       {
  787.          if(_loc2_.m_smartFindChars[textToFind_str.charAt(j)] != undefined)
  788.          {
  789.             anySpecial = true;
  790.             break;
  791.          }
  792.          j++;
  793.       }
  794.       var startmc_i = _loc2_.m_tailPageIdx;
  795.       if(startmc_i == 0)
  796.       {
  797.          startmc_i = 1;
  798.       }
  799.       var startIdx_i = _loc2_.m_tailCharIdx + 1;
  800.       if(startIdx_i < 0)
  801.       {
  802.          startIdx_i = 0;
  803.       }
  804.       if(_loc2_.m_lastFindStr != textToFind_str)
  805.       {
  806.          startmc_i = 1;
  807.          startIdx_i = 0;
  808.          _loc2_.m_lastFindStr = textToFind_str;
  809.       }
  810.       var found = false;
  811.       var np = _loc2_.m_mainView.getNumPages();
  812.       var _loc1_ = startmc_i;
  813.       while(_loc1_ <= np)
  814.       {
  815.          var text_mc = _loc2_.getNthTextMC(_loc1_);
  816.          if(text_mc != null)
  817.          {
  818.             var textSnapshot_ts = text_mc.getTS(true);
  819.             var _loc3_ = undefined;
  820.             if(anySpecial)
  821.             {
  822.                _loc3_ = FlashPaper.DocumentView.findSpecial(textSnapshot_ts,startIdx_i,textToFind_str,caseSens_b,_loc2_.m_smartFindChars);
  823.             }
  824.             else
  825.             {
  826.                _loc3_ = textSnapshot_ts.findText(startIdx_i,textToFind_str,caseSens_b);
  827.             }
  828.             if(_loc3_ >= 0)
  829.             {
  830.                _loc2_.updateSelectionRange(_loc1_,_loc3_,_loc1_,_loc3_ + textToFind_str.length - 1);
  831.                _loc2_.ensureSelectionIsVisible();
  832.                found = true;
  833.                break;
  834.             }
  835.          }
  836.          startIdx_i = 0;
  837.          _loc1_ = _loc1_ + 1;
  838.       }
  839.       if(!found)
  840.       {
  841.          _loc2_.selectRange(_loc2_.m_headPageIdx,_loc2_.m_headCharIdx,_loc2_.m_tailPageIdx,_loc2_.m_tailCharIdx,false);
  842.          _loc2_.emptySelection();
  843.       }
  844.       return found;
  845.    }
  846.    function getTextSelectionRange()
  847.    {
  848.       var _loc2_ = this;
  849.       if(_loc2_.m_headCharIdx < 0)
  850.       {
  851.          return null;
  852.       }
  853.       var _loc1_ = new FlashPaper.SelectionRange();
  854.       _loc1_.headPageIdx = _loc2_.m_headPageIdx;
  855.       _loc1_.headCharIdx = _loc2_.m_headCharIdx;
  856.       _loc1_.tailPageIdx = _loc2_.m_tailPageIdx;
  857.       _loc1_.tailCharIdx = _loc2_.m_tailCharIdx;
  858.       return _loc1_;
  859.    }
  860.    function setTextSelectionRange(sel, skipBroadcast)
  861.    {
  862.       var _loc1_ = sel;
  863.       var _loc2_ = this;
  864.       if(_loc1_)
  865.       {
  866.          _loc2_.updateSelectionRange(_loc1_.headPageIdx,_loc1_.headCharIdx,_loc1_.tailPageIdx,_loc1_.tailCharIdx);
  867.       }
  868.       else
  869.       {
  870.          _loc2_.emptySelection();
  871.       }
  872.       if(skipBroadcast)
  873.       {
  874.          _loc2_.delayedBroadcast("onSelection",false);
  875.       }
  876.    }
  877.    function getSelectedText()
  878.    {
  879.       var text_s = "";
  880.       var np = this.m_mainView.getNumPages();
  881.       var _loc2_ = 1;
  882.       while(_loc2_ <= np)
  883.       {
  884.          var _loc3_ = this.getNthTextMC(_loc2_);
  885.          if(_loc3_ != null)
  886.          {
  887.             var textSnapshot_ts = _loc3_.getTS(true);
  888.             var _loc1_ = textSnapshot_ts.getSelectedText(true);
  889.             if(_loc1_ != null)
  890.             {
  891.                if(text_s.length > 0 && _loc1_.length > 0)
  892.                {
  893.                   text_s += "\n";
  894.                }
  895.                text_s += _loc1_;
  896.             }
  897.          }
  898.          _loc2_ = _loc2_ + 1;
  899.       }
  900.       return text_s;
  901.    }
  902.    function getToolMode()
  903.    {
  904.       return this.m_curTool;
  905.    }
  906.    function setToolMode(newTool)
  907.    {
  908.       var _loc1_ = this;
  909.       var _loc2_ = newTool;
  910.       switch(_loc2_)
  911.       {
  912.          case "":
  913.             break;
  914.          case "select":
  915.             if(_loc1_.getTextSnapshot == null)
  916.             {
  917.                return false;
  918.             }
  919.             break;
  920.          case "pan":
  921.             if(!_loc1_.m_scrollingEnabled)
  922.             {
  923.                return false;
  924.             }
  925.             break;
  926.          default:
  927.             return false;
  928.       }
  929.       if(_loc1_.m_curTool != _loc2_)
  930.       {
  931.          if(_loc1_.m_curTool == "select")
  932.          {
  933.             _loc1_.tossAllTS();
  934.          }
  935.          _loc1_.m_curTool = _loc2_;
  936.          if(FlashPaper.Utils.doMouseHitTest(_loc1_.bg_mc))
  937.          {
  938.             _loc1_.m_mainView.setCursor(_loc1_,_loc2_);
  939.          }
  940.          _loc1_.m_mainView.broadcastMessage("onToolChanged",_loc2_);
  941.       }
  942.       return true;
  943.    }
  944.    function onToolOver()
  945.    {
  946.       var _loc1_ = this;
  947.       _loc1_.m_mainView.setCursorFocus(_loc1_);
  948.       _loc1_.m_mainView.setCursor(_loc1_,_loc1_.m_curTool);
  949.    }
  950.    function onToolOut()
  951.    {
  952.       this.m_mainView.setCursor(this,"");
  953.    }
  954.    function distFromClickIsWithin(i)
  955.    {
  956.       var _loc1_ = this;
  957.       var _loc0_ = Math.abs(_loc1_.m_mainView.getMouseY() - _loc1_.m_initialMouseY) <= i && Math.abs(_loc1_.m_mainView.getMouseX() - _loc1_.m_initialMouseX) <= i;
  958.       _loc1_;
  959.       return _loc0_;
  960.    }
  961.    function onToolDown()
  962.    {
  963.       var _loc1_ = this;
  964.       if(FlashPaper.Utils.doMouseHitTest(_loc1_.bg_mc))
  965.       {
  966.          _loc1_.m_usingTool = true;
  967.          _loc1_.m_doubleClicked = false;
  968.          _loc1_.m_wordSelect = false;
  969.          _loc1_.m_useLastClickForHead = false;
  970.          if(getTimer() - _loc1_.m_initialMouseTime <= FlashPaper.DocumentView.DBLCLICK_TIME)
  971.          {
  972.             if(_loc1_.distFromClickIsWithin(FlashPaper.DocumentView.DBLCLICK_DIST))
  973.             {
  974.                _loc1_.m_doubleClicked = true;
  975.             }
  976.          }
  977.          _loc1_.m_initialMouseTime = getTimer();
  978.          _loc1_.m_initialMouseX = _loc1_.m_mainView.getMouseX();
  979.          _loc1_.m_initialMouseY = _loc1_.m_mainView.getMouseY();
  980.          _loc1_.m_mouseMovedEnough = false;
  981.          switch(_loc1_.m_curTool)
  982.          {
  983.             case "pan":
  984.                if(!_loc1_.m_scrollingEnabled)
  985.                {
  986.                   _loc1_.m_usingTool = false;
  987.                   break;
  988.                }
  989.                _loc1_.m_startScrollY = _loc1_.y_sb.getScrollPosition();
  990.                if(isNaN(_loc1_.m_startScrollY))
  991.                {
  992.                   _loc1_.m_startScrollY = 0;
  993.                }
  994.                _loc1_.m_startScrollX = _loc1_.x_sb.getScrollPosition();
  995.                if(isNaN(_loc1_.m_startScrollX))
  996.                {
  997.                   _loc1_.m_startScrollX = 0;
  998.                }
  999.                break;
  1000.             case "select":
  1001.                _loc1_.m_wordSelect = _loc1_.m_doubleClicked;
  1002.                var _loc3_ = _loc1_.hitTestTextMC();
  1003.                if(_loc3_)
  1004.                {
  1005.                   var text_mc = _loc1_.getNthTextMC(_loc3_);
  1006.                   var textSnapshot_ts = text_mc.getTS(true);
  1007.                   var _loc2_ = textSnapshot_ts.hitTestTextNearPos(text_mc._xmouse,text_mc._ymouse,FlashPaper.DocumentView.HUGE_HIT_TEST_DIST);
  1008.                   var extend = Key.isDown(16);
  1009.                   if(extend)
  1010.                   {
  1011.                      if(_loc1_.m_headCharIdx < 0)
  1012.                      {
  1013.                         _loc1_.m_headPageIdx = _loc1_.m_lastClickHeadPageIdx;
  1014.                         _loc1_.m_headCharIdx = _loc1_.m_lastClickHeadCharIdx;
  1015.                      }
  1016.                      if(_loc1_.m_headCharIdx < 0)
  1017.                      {
  1018.                         _loc2_ = -1;
  1019.                         extend = false;
  1020.                      }
  1021.                   }
  1022.                   else
  1023.                   {
  1024.                      _loc1_.emptySelection();
  1025.                   }
  1026.                   if(_loc2_ >= 0)
  1027.                   {
  1028.                      if(extend)
  1029.                      {
  1030.                         _loc1_.updateSelectionTail(_loc3_,_loc2_);
  1031.                      }
  1032.                      else if(_loc1_.m_wordSelect)
  1033.                      {
  1034.                         _loc1_.updateSelectionRange(_loc3_,_loc2_,_loc3_,_loc2_);
  1035.                      }
  1036.                      else
  1037.                      {
  1038.                         _loc1_.m_lastClickHeadPageIdx = _loc3_;
  1039.                         _loc1_.m_lastClickHeadCharIdx = _loc2_;
  1040.                         _loc1_.m_useLastClickForHead = true;
  1041.                      }
  1042.                   }
  1043.                   else if(!extend)
  1044.                   {
  1045.                      _loc1_.emptySelection();
  1046.                   }
  1047.                }
  1048.          }
  1049.       }
  1050.    }
  1051.    function onToolMove()
  1052.    {
  1053.       var _loc1_ = this;
  1054.       if(_loc1_.m_usingTool)
  1055.       {
  1056.          if(!_loc1_.m_mouseMovedEnough)
  1057.          {
  1058.             if(!_loc1_.distFromClickIsWithin(FlashPaper.DocumentView.TOOL_HYSTERESIS))
  1059.             {
  1060.                _loc1_.m_mouseMovedEnough = true;
  1061.             }
  1062.          }
  1063.          switch(_loc1_.m_curTool)
  1064.          {
  1065.             case "pan":
  1066.                FlashPaper.DocumentView.handleAbsoluteScroll(_loc1_.y_sb,_loc1_.m_startScrollY - (_loc1_.m_mainView.getMouseY() - _loc1_.m_initialMouseY));
  1067.                FlashPaper.DocumentView.handleAbsoluteScroll(_loc1_.x_sb,_loc1_.m_startScrollX - (_loc1_.m_mainView.getMouseX() - _loc1_.m_initialMouseX));
  1068.                break;
  1069.             case "select":
  1070.                if(!FlashPaper.Utils.doMouseHitTest(_loc1_.bg_mc))
  1071.                {
  1072.                   var _loc2_ = _loc1_.m_mainView.getBoundsInMainViewCoords(_loc1_.bg_mc);
  1073.                   FlashPaper.DocumentView.handleAutoScroll(_loc1_.y_sb,_loc1_.m_mainView.getMouseY(),_loc2_.yMin,_loc2_.yMax);
  1074.                   FlashPaper.DocumentView.handleAutoScroll(_loc1_.x_sb,_loc1_.m_mainView.getMouseX(),_loc2_.xMin,_loc2_.xMax);
  1075.                }
  1076.                var _loc3_ = _loc1_.hitTestTextMC();
  1077.                if(_loc3_ != 0)
  1078.                {
  1079.                   if(_loc1_.m_headPageIdx != 0 || _loc1_.m_useLastClickForHead && _loc1_.m_lastClickHeadPageIdx != 0)
  1080.                   {
  1081.                      var text_mc = _loc1_.getNthTextMC(_loc3_);
  1082.                      var textSnapshot_ts = text_mc.getTS(true);
  1083.                      var index = textSnapshot_ts.hitTestTextNearPos(text_mc._xmouse,text_mc._ymouse,FlashPaper.DocumentView.HUGE_HIT_TEST_DIST);
  1084.                      if(_loc1_.m_mouseMovedEnough)
  1085.                      {
  1086.                         if(_loc1_.m_useLastClickForHead)
  1087.                         {
  1088.                            _loc1_.updateSelectionRange(_loc1_.m_lastClickHeadPageIdx,_loc1_.m_lastClickHeadCharIdx,_loc3_,index);
  1089.                            _loc1_.m_useLastClickForHead = false;
  1090.                         }
  1091.                         else
  1092.                         {
  1093.                            _loc1_.updateSelectionTail(_loc3_,index);
  1094.                         }
  1095.                      }
  1096.                   }
  1097.                }
  1098.          }
  1099.          _loc1_.m_mainView.onPageMayHaveChanged();
  1100.       }
  1101.       updateAfterEvent();
  1102.    }
  1103.    function onToolUp()
  1104.    {
  1105.       var _loc1_ = this;
  1106.       _loc1_.m_usingTool = false;
  1107.       _loc1_.m_wordSelect = false;
  1108.       _loc1_.m_useLastClickForHead = false;
  1109.    }
  1110.    static function handleAbsoluteScroll(sb, scrollPos)
  1111.    {
  1112.       var _loc1_ = sb;
  1113.       if(_loc1_ != null && _loc1_._visible && _loc1_.getScrollPosition() != scrollPos)
  1114.       {
  1115.          _loc1_.setScrollPosition(scrollPos);
  1116.          return true;
  1117.       }
  1118.       return false;
  1119.    }
  1120.    static function handleRelativeScroll(sb, delta_i)
  1121.    {
  1122.       if(delta_i != 0)
  1123.       {
  1124.          return FlashPaper.DocumentView.handleAbsoluteScroll(sb,sb.getScrollPosition() + delta_i);
  1125.       }
  1126.       return false;
  1127.    }
  1128.    static function handleAutoScroll(sb, pos_i, minpos_i, maxpos_i)
  1129.    {
  1130.       var _loc1_ = pos_i;
  1131.       var _loc3_ = sb;
  1132.       if(_loc3_ != null && _loc3_._visible)
  1133.       {
  1134.          var _loc2_ = undefined;
  1135.          if(_loc1_ > maxpos_i)
  1136.          {
  1137.             _loc2_ = _loc1_ - maxpos_i;
  1138.          }
  1139.          else if(_loc1_ < minpos_i)
  1140.          {
  1141.             _loc2_ = _loc1_ - minpos_i;
  1142.          }
  1143.          return FlashPaper.DocumentView.handleRelativeScroll(_loc3_,_loc2_);
  1144.       }
  1145.       return false;
  1146.    }
  1147.    function onMouseWheel(delta)
  1148.    {
  1149.       var _loc1_ = this;
  1150.       if(_loc1_.m_scrollingEnabled)
  1151.       {
  1152.          if(!_loc1_.m_usingTool && _loc1_.y_sb._visible && delta != 0)
  1153.          {
  1154.             var _loc2_ = _loc1_.y_sb.getScrollPosition();
  1155.             if(isNaN(_loc2_))
  1156.             {
  1157.                _loc2_ = 0;
  1158.             }
  1159.             _loc2_ -= delta * FlashPaper.DocumentView.WHEEL_SCROLL_DISTANCE;
  1160.             _loc1_.y_sb.setScrollPosition(_loc2_);
  1161.             _loc1_.m_mainView.onPageMayHaveChanged();
  1162.          }
  1163.       }
  1164.    }
  1165.    function getScrolledPage(middle)
  1166.    {
  1167.       var _loc2_ = this;
  1168.       var _loc3_ = _loc2_.y_sb.getScrollPosition();
  1169.       if(middle)
  1170.       {
  1171.          _loc3_ += _loc2_.y_sb.getSize() / 2;
  1172.       }
  1173.       _loc3_ = Math.round(_loc3_ / _loc2_.m_mainView.getCurrentScaleFraction());
  1174.       var _loc1_ = _loc2_.m_mainView.getNumPages();
  1175.       while(_loc1_ > 0)
  1176.       {
  1177.          if(_loc2_.getNthPage(_loc1_)._y <= _loc3_)
  1178.          {
  1179.             return _loc1_;
  1180.          }
  1181.          _loc1_ = _loc1_ - 1;
  1182.       }
  1183.       return 1;
  1184.    }
  1185.    function rebuildMask()
  1186.    {
  1187.       var _loc1_ = this;
  1188.       var _loc3_ = _loc1_.m_mainView.getDocViewWidth();
  1189.       var _loc2_ = _loc1_.m_mainView.getDocViewHeight();
  1190.       _loc1_.setMask(null);
  1191.       _loc1_.m_fpMask.removeMovieClip();
  1192.       _loc1_.createEmptyMovieClip("m_fpMask",1066);
  1193.       _loc1_.m_fpMask.beginFill(0,100);
  1194.       _loc1_.m_fpMask.moveTo(0,0);
  1195.       _loc1_.m_fpMask.lineTo(_loc3_,0);
  1196.       _loc1_.m_fpMask.lineTo(_loc3_,_loc2_);
  1197.       _loc1_.m_fpMask.lineTo(0,_loc2_);
  1198.       _loc1_.m_fpMask.lineTo(0,0);
  1199.       _loc1_.m_fpMask.endFill();
  1200.       _loc1_.setMask(_loc1_.m_fpMask);
  1201.    }
  1202. }
  1203.